//
//  UITextView+ZKChain.h
//  ZKChain
//
//  Created by zk_01 on 2022/1/12.
//

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@interface UITextView (ZKChain)
/* 因为父类的Category中返回的是UIView类型，不便于链式继续调用，所以这里写同名的get方法，返回值不同 */

/// 初始化 没有设置Frame
+ (UITextView * _Nonnull (^)(void))zk_allocInit;

/// 带Frame的初始化
+ (UITextView * _Nonnull (^)(CGRect))zk_allocInitWithFrame;

/// 设置View的Frame
- (UITextView * _Nonnull (^)(CGRect))zk_frame;

/// 设置View的背景色
- (UITextView * _Nonnull (^)(UIColor * _Nonnull))zk_backgroundColor;

/// 将View添加到父视图上
- (UITextView * _Nonnull (^)(UIView * _Nonnull))zk_addToSuperView;

/// 设置View是否允许交互
- (UITextView * _Nonnull (^)(BOOL))zk_userInteractionEnabled;

/// 设置View的Tag
- (UITextView * _Nonnull (^)(NSInteger))zk_tag;

/// 设置View的Bounds
- (UITextView * _Nonnull (^)(CGRect))zk_bounds;

/// 设置View的中心点
- (UITextView * _Nonnull (^)(CGPoint))zk_center;

/// 设置View的透明度
- (UITextView * _Nonnull (^)(CGFloat))zk_alpha;

/// 设置View的隐藏状态
- (UITextView * _Nonnull (^)(BOOL))zk_hidden;

/// 设置View的TitColor
- (UITextView * _Nonnull (^)(UIColor * _Nonnull))zk_tintColor;

#pragma mark 对应UIScrollView 的一些属性

/// 内容偏移量
- (UITextView * _Nonnull (^)(CGPoint))zk_contentOffset;

/// 内容大小
- (UITextView * _Nonnull (^)(CGSize))zk_contentSize;

/// 内容边距
- (UITextView * _Nonnull (^)(UIEdgeInsets))zk_contentInset;

/// 确定调整后的内容偏移量的行为。
- (UITextView * _Nonnull (^)(UIScrollViewContentInsetAdjustmentBehavior))zk_contentInsetAdjustmentBehavior API_AVAILABLE(ios(11.0));

/// 表示系统是否自动调整滚动指示器的插入。
- (UITextView * _Nonnull (^)(BOOL))zk_automaticallyAdjustsScrollIndicatorInsets API_AVAILABLE(ios(13.0));

/// 边框是否支持回弹效果
- (UITextView * _Nonnull (^)(BOOL))zk_bounces;

/// 垂直方向边框是否支持回弹效果
- (UITextView * _Nonnull (^)(BOOL))zk_alwaysBounceVertical;

/// 水平方向边框是否支持回弹效果
- (UITextView * _Nonnull (^)(BOOL))zk_alwaysBounceHorizontal;

/// 是否分页
- (UITextView * _Nonnull (^)(BOOL))zk_pagingEnabled;

/// 是否可以滚动
- (UITextView * _Nonnull (^)(BOOL))zk_scrollEnabled;

/// 是否显示垂直显示器
- (UITextView * _Nonnull (^)(BOOL))zk_showsVerticalScrollIndicator;

/// 是否显示水平显示器
- (UITextView * _Nonnull (^)(BOOL))zk_showsHorizontalScrollIndicator;

/// 指示器样式
- (UITextView * _Nonnull (^)(UIScrollViewIndicatorStyle))zk_indicatorStyle;

/// 垂直方向指示器的偏移量
- (UITextView * _Nonnull (^)(UIEdgeInsets))zk_verticalScrollIndicatorInsets API_AVAILABLE(ios(11.1), tvos(11.1));;

/// 水平方向指示器的偏移量
- (UITextView * _Nonnull (^)(UIEdgeInsets))zk_horizontalScrollIndicatorInsets API_AVAILABLE(ios(11.1), tvos(11.1));

/// 指示器的偏移量
- (UITextView * _Nonnull (^)(UIEdgeInsets))zk_scrollIndicatorInsets;

/// 最小缩放
- (UITextView * _Nonnull (^)(CGFloat))zk_minimumZoomScale;

/// 最大缩放
- (UITextView * _Nonnull (^)(CGFloat))zk_maximumZoomScale;

/// 缩放尺度
- (UITextView * _Nonnull (^)(CGFloat))zk_zoomScale;

/// 它决定当缩放超过最大或最小限制时滚动视图是否对内容缩放进行动画处理
- (UITextView * _Nonnull (^)(BOOL))zk_bouncesZoom;

/// 控制是否启用滚动到顶部的手势
- (UITextView * _Nonnull (^)(BOOL))zk_scrollsToTop;

/// 在滚动视图中开始拖动时取消键盘的方式
- (UITextView * _Nonnull (^)(UIScrollViewKeyboardDismissMode))zk_keyboardDismissMode;

/// 刷新控制
- (UITextView * _Nonnull (^)(UIRefreshControl * _Nullable))zk_refreshControl API_AVAILABLE(ios(10.0));


#pragma mark 对应UITextView 的一些属性
/// 设置代理
- (UITextView * _Nonnull (^)(id <UITextViewDelegate> _Nullable))zk_delegate;

/// 设置文字
- (UITextView * _Nonnull (^)(NSString * _Nullable))zk_text;

/// 设置字体大小
- (UITextView * _Nonnull (^)(UIFont * _Nullable))zk_font;

/// 设置字体颜色
- (UITextView * _Nonnull (^)(UIColor * _Nullable))zk_textColor;

/// 设置字体对齐方式
- (UITextView * _Nonnull (^)(NSTextAlignment))zk_textAlignment;

/// 当前选择的范围
- (UITextView * _Nonnull (^)(NSRange))zk_selectedRange;

/// 是否可编辑
- (UITextView * _Nonnull (^)(BOOL))zk_editable;

/// 是否可选
- (UITextView * _Nonnull (^)(BOOL))zk_selectable;

/// 您可以使用这个属性指定应该在文本视图中自动转换为url的数据类型(电话号码、http链接等)。
/// 当点击时，文本视图打开负责处理URL类型的应用程序，并将URL传递给它。请注意，如果文本视图的可编辑属性设置为YES，则不会发生数据检测
- (UITextView * _Nonnull (^)(UIDataDetectorTypes))zk_dataDetectorTypes;

/// 当设置为YES时，文本视图允许用户更改当前选中文本的基本样式。可用的样式选项在编辑菜单中列出，并且只适用于所选内容。 此属性的默认值为NO。
- (UITextView * _Nonnull (^)(BOOL))zk_allowsEditingTextAttributes;

/// 设置textView的NSAttributedString
- (UITextView * _Nonnull (^)(NSAttributedString * _Nullable))zk_attributedText;

/// 这个字典包含应用于新输入文本的属性键(和相应的值)。当文本视图的选择发生变化时，字典的内容将自动清除。
- (UITextView * _Nonnull (^)(NSDictionary<NSAttributedStringKey, id> *_Nonnull))zk_typingAttributes;

/// 如果这个属性的值为nil，当文本视图成为第一个响应者时，它将显示标准系统键盘。将自定义视图赋值给此属性将导致显示该视图。 此属性的默认值为nil。
- (UITextView * _Nonnull (^)(UIView * _Nonnull))zk_inputView;

///当文本视图成为第一个响应器时要显示的自定义附件视图。
- (UITextView * _Nonnull (^)(UIView * _Nonnull))zk_inputAccessoryView;

/// 此属性的默认值为NO。当该属性的值为YES且文本视图处于编辑模式时，选择UI将被隐藏，插入新文本将清除文本视图的内容，并将该属性的值设置回NO。
- (UITextView * _Nonnull (^)(BOOL))zk_clearsOnInsertion;

/// 文本容器对象，它定义文本在文本视图中显示的区域
- (UITextView * _Nonnull (^)(UIEdgeInsets))zk_textContainerInset;

/// 默认属性指定带有单个下划线和指针指针的蓝色文本。
- (UITextView * _Nonnull (^)(NSDictionary<NSAttributedStringKey,id> * _Nonnull))zk_linkTextAttributes;

- (UITextView * _Nonnull (^)(BOOL))zk_usesStandardTextScaling API_AVAILABLE(ios(13.0));

#pragma mark 对应UITextView 的一些方法

/// 带Frame以及NSTextContainer的初始化
+ (UITextView * _Nonnull (^)(CGRect,NSTextContainer * _Nullable))zk_allocInitWithFrameAndTextContainer;

@end

NS_ASSUME_NONNULL_END
